#include "StdAfx.h"
#include "DynamicData.h"
#include <memory.h>

DynamicData::_dynDat::_dynDat(const char* szVal):szVal(szVal)
{
}
DynamicData::_dynDat::_dynDat(int iVal):iVal(iVal)
{
}
DynamicData::_dynDat::_dynDat(Vloat dVal):dVal(dVal)
{
}
DynamicData::_dynDat::_dynDat(void* pVal):pVal(pVal)
{
}
#ifdef VLARE_ENABLE_ARRAY_TYPE
DynamicData::_dynDat::_dynDat(DynamicData* aVal):aVal(aVal)
{
}
#endif
DynamicData::_dynDat::_dynDat(VlareFunction pfnVal):pfn(pfnVal)
{
}
DynamicData::_dynDat::_dynDat(const _dynDat& cpyVal)
{
	memcpy(this, &cpyVal, sizeof(_dynDat));
}

DynamicData::~DynamicData()
{
}
DynamicData::DynamicData(const char* const val):val(val), type(TYPE_STRING)
{
}

DynamicData::DynamicData(int val):val(val), type(TYPE_INT)
{
}

DynamicData::DynamicData(Vloat val):val(val), type(TYPE_FLOAT)
{

}

DynamicData::DynamicData(void* val):val(val), type(TYPE_POINTER)
{
}

DynamicData::DynamicData(VlareFunction val):val(val), type(TYPE_FUNCTION)
{
}

DynamicData::DynamicData():val(0x0), type(TYPE_NULL)
{
}

DynamicData::DynamicData(const DynamicData& valu):val(valu.val), type(valu.type)
{
	//printf("%fcopy ",val.dVal);
}
#ifdef VLARE_ENABLE_ARRAY_TYPE
DynamicData::~DynamicData(void)
{
	if(type == TYPE_ARRAY)
		delete [] val.aVal;
}
#endif
DynamicData::operator const char* () const
{
	VLARE_TYPECHECK(this, TYPE_STRING);
	return VLARE_INVOKEGET(this, TYPE_STRING, szVal, const char*);
}
DynamicData::operator int () const
{
	VLARE_TYPECHECK(this, TYPE_INT);
	return VLARE_INVOKEGET(this, TYPE_INT, iVal, int&);
}
DynamicData::operator Vloat () const
{
	VLARE_TYPECHECK(this, TYPE_FLOAT);
	return VLARE_INVOKEGET(this, TYPE_FLOAT, dVal, Vloat);
}
DynamicData::operator void* () const
{
	VLARE_TYPECHECK(this, TYPE_POINTER);
	return VLARE_INVOKEGET(this, TYPE_POINTER, pVal, void*);
}
DynamicData::operator VlareFunction () const
{
	VLARE_TYPECHECK(this, TYPE_FUNCTION);
	return val.pfn;
}
